package Seletores;

import java.util.ArrayList;

import Util.ArquivoCSVUtil;

public class RodaSeletorBase {

	public static void main(String[] args) {
		int numFeatures = 30;
		String CAMINHO_BASES = "./bases/";
		String NOME_BASE = "opDigits_0";
		String NOME_BASE_SAIDA = "opDigits";
		
		for (int i = 1; i <= 10; i++) {
			System.out.println("Tratando arquivo " + i);
			ArrayList<String[]> baseEntrada = ArquivoCSVUtil.leituraCSV(CAMINHO_BASES + NOME_BASE + i+ ".csv");
			
			int novoTamanhoBase = (int) ( (baseEntrada.size() - 1) * 0.9); //subtraida a linha dos titulos
			ArrayList<String[]> base = new ArrayList<>();
			for (int j = 1; j < novoTamanhoBase; j++) {
				base.add(baseEntrada.get(j));
			}
			
			BaseProbabilidadesDiscreta baseP = new BaseProbabilidadesDiscreta(base);
			SeletoresDiscretos seletor = new SeletoresDiscretos(baseP);
			
			//algoritmo utilizado
			ArrayList<Integer> features = seletor.mIFs(numFeatures, 1);
			ArquivoCSVUtil.escreveArquivosWeka(baseEntrada, features, NOME_BASE_SAIDA, i, "Mifs");	
			
		}
		
		for (int i = 1; i <= 10; i++) {
			System.out.println("Tratando arquivo " + i);
			ArrayList<String[]> baseEntrada = ArquivoCSVUtil.leituraCSV(CAMINHO_BASES + NOME_BASE + i+ ".csv");
			
			int novoTamanhoBase = (int) ( (baseEntrada.size() - 1) * 0.9); //subtraida a linha dos titulos
			ArrayList<String[]> base = new ArrayList<>();
			for (int j = 1; j < novoTamanhoBase; j++) {
				base.add(baseEntrada.get(j));
			}
			
			BaseProbabilidadesDiscreta baseP = new BaseProbabilidadesDiscreta(base);
			SeletoresDiscretos seletor = new SeletoresDiscretos(baseP);
			
			//algoritmo utilizado		
			ArrayList<Integer> features = seletor.mIFsU(numFeatures, 1);
			ArquivoCSVUtil.escreveArquivosWeka(baseEntrada, features, NOME_BASE_SAIDA, i, "Mifs-U");

		}

		for (int i = 1; i <= 10; i++) {
			System.out.println("Tratando arquivo " + i);
			ArrayList<String[]> baseEntrada = ArquivoCSVUtil.leituraCSV(CAMINHO_BASES + NOME_BASE + i+ ".csv");
			
			int novoTamanhoBase = (int) ( (baseEntrada.size() - 1) * 0.9); //subtraida a linha dos titulos
			ArrayList<String[]> base = new ArrayList<>();
			for (int j = 1; j < novoTamanhoBase; j++) {
				base.add(baseEntrada.get(j));
			}
			
			BaseProbabilidadesDiscreta baseP = new BaseProbabilidadesDiscreta(base);
			SeletoresDiscretos seletor = new SeletoresDiscretos(baseP);
			
			//algoritmo utilizado
			ArrayList<Integer> features = seletor.mRMR(numFeatures);
			ArquivoCSVUtil.escreveArquivosWeka(baseEntrada, features, NOME_BASE_SAIDA, i, "mRMR");
			
		}
		
		for (int i = 1; i <= 10; i++) {
			System.out.println("Tratando arquivo " + i);
			ArrayList<String[]> baseEntrada = ArquivoCSVUtil.leituraCSV(CAMINHO_BASES + NOME_BASE + i+ ".csv");
			
			int novoTamanhoBase = (int) ( (baseEntrada.size() - 1) * 0.9); //subtraida a linha dos titulos
			ArrayList<String[]> base = new ArrayList<>();
			for (int j = 1; j < novoTamanhoBase; j++) {
				base.add(baseEntrada.get(j));
			}
			
			BaseProbabilidadesDiscreta baseP = new BaseProbabilidadesDiscreta(base);
			SeletoresDiscretos seletor = new SeletoresDiscretos(baseP);
			
			//algoritmo utilizado
			for (int j = 2; j <= numFeatures; j++) {
				ArrayList<Integer> features = seletor.mRR(j);
				ArquivoCSVUtil.escreveArquivosWeka(baseEntrada, features, NOME_BASE_SAIDA, i, "mRR");
			}
			
			
		}
		
	}

}
